home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 32
/
Amiga Format AFCD32 (Nov 1998, Issue 117).iso
/
-seriously_amiga-
/
programming
/
amos
/
a3dsimple-sim
/
simplesim.amos
/
simplesim.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1998-08-10
|
42KB
|
1,484 lines
Set Buffer 34
'
Colour 1,$456
Hide
Curs Off
'
'
''
'Poke $DFF1DC,32
Screen Open 1,50,25,16,Lowres : Rem for distant obs
D$=Dir$
Load D$+"banks/jetnoises.abk",5
'
LONGTH=500 : Rem 500
Reserve As Chip Work 6,LONGTH
X=0 : CHANGE=12 : Rem 120 was ok 8
TIME=LONGTH/160 : WHAT=0 : Rem 160,- 100 div gave even result larger=higher 86
For I=0 To LONGTH-1
Inc WHAT
X=X+CHANGE
If WHAT=TIME Then CHANGE=-CHANGE : WHAT=0
Y=X
Poke Start(6)+I,Y
Next
For S=0 To LONGTH-1 Step 2 : Rem 2
Poke Start(6)+S,Rnd(12) : Rem 12
Next
Dim OBS$(20) : Dim OBN(40,40) : Dim OBX(40,40) : Dim OBY(40,40)
Dim CAN(40,40) : Dim DRX(58) : Dim DRY(58)
Dim LINX(70) : Dim LINY(70) : Dim LINX2(70) : Dim LINY2(70)
Dim TARGX(20) : Dim TARGY(20) : Dim TMPX(20) : Dim TMPY(20)
Dim STATEX(50) : Dim STATEY(50)
Dim SYN#(361)
Dim COZN#(361)
COMMENCE:
HYTE=125 : BXHYT=HYTE/2 : WIPEOUT=(HYTE)*40
Screen Open 2,320,256,16,Lowres
Screen Hide 2
Cls 2 : Get Bob 2,24,0,0 To 55,42
Load Iff "work:pictures-amos/cockpit4"
Get Block 1,40,176,246,10,1
'
Screen Open 4,320,200,16,Lowres : Rem to make map and space?? for 3d over-writing bug
Colour 1,$456
Screen Open 3,320,256,16,Lowres : Rem 3D screen
Screen Hide 3
'
Curs Off
Screen Copy 2,0,0,320,256 To 3,0,HYTE-183 : Rem Adds cockpit Picture
Ink 6 : Draw 204,160 To 204,180 : Rem fuel bar
Screen 1 : Cls 11 : Ink 0
Screen 3
' above is for distant obs effect
For Z=0 To 40 : For T=0 To 40 : OBN(Z,T)=40 : Next : Next
'above sets array if not loaded
'
'
Gosub SETUP
Gosub LINES
Gosub STRUTS
Gosub INDATA
Gosub MAKETARGET
Gosub AIR
Gosub MAP
Screen Show 3
Autoback 1 : Locate 5,20 : Print TIMEBETWEEN;" " : Gosub WHATSUP : Autoback 0
K=Timer
Sprite 2,220,41,3 : Rem for simple hud display and sight
Sprite 4,350,41,3
Sprite 6,281,41,4
Screen Show 3
DURATION=0
' --------------- some sound
Volume 0 : Sam Loop On
Sam Play %1000,1,15000 : Rem roar dff0d6
Sam Play %100,1,15000 : Rem roar out of sync dff0c6 doubled for explode
Sam Raw %1,Start(6),Length(6),3200 : Rem turbine whistle dff0a6
' %10 dff0b6 for missile and bang
' ------------
'
'
STAARTOFLOOP:
Timer=0
'///////////////////////////////////////////////////////////////////////////
'/////////////////////////////////////////////////////////////////////////
Repeat
'
If WINN=1 Then Gosub WIN
Gosub STICKREAD
'
F$=Inkey$ : Clear Key
If F$<>"" Then Gosub KEYBOARD
'
If SPEED<POWER*5 Then Add SPEED,2
If SPEED>(POWER*5)
Add SPEED,-1
If SPEED>100 : Add SPEED,-1 : End If
If SPEED<5 : SPEED=0 : POWER=0 : End If
End If
'
If WZ<40 Then Gosub KRUNCH : Rem if hit ground
'
'
Gosub ADJUSTVW
'
Dec ECHECK : If ECHECK<1 Then Gosub ENEW : Rem ememy PLANE
Gosub PLANEADJUST : Rem enemy plane speed etc
'
Colour 10,$9A8 : If WZ<700 Then Colour 10,$9A9 : Rem try9a8
OX=DX : OY=DY
AHED=DHEAD+(WZ*3)
If WZ<1500 Then Add AHED,2000
'
MX= Extension_4_03BA(0,SIDE,0,AHED)
MY= Extension_4_03C8 : Rem -negative offset if needed by SIDE
DX=(MX/GRIDSIZE)-MORRE
DY=(MY/GRIDSIZE)-MORRE
OFFX=0
OFFY=0
If DX>OX Then Gosub OBNS2
If DX<OX : If GROBS=3 : OFFX=1 : End If : Gosub OBNS2 : End If
If DY>OY Then Gosub OBNS2
If DY<OY : If GROBS=3 : OFFY=1 : End If : Gosub OBNS2 : End If
'
TARMX= Extension_4_03BA(0,SIDE,0,AHED+FARHEAD)
TARMY= Extension_4_03C8
FARX=(TARMX/GRIDSIZE)
FARY=(TARMY/GRIDSIZE)
''
If WHOLD>0
Dec WHOLD
If WHOLD=1
Sam Play %100,1,15000 : Rem roar out of sync back on after explode
Volume %110,0 : Rem and turn down looped explode sound !##$@!
End If
End If
If GUH>13 and BANG=0 Then Volume %10,0 : Rem prevents whosh repeating
If GUH=MISSTEP
GUH=0
Extension_4_0090 1 : Rem kill missile at end of run
End If
'
If XFIRE>15 and GUH=0 Then Gosub LAUNCH
'
If GUH<MISSTEP and GUH>0
Inc GUH : Extension_4_0100 1,MISSMOVE : Inc IT : Extension_4_05E2 1,0,IT
' i.e. goes misstep steps at 1000 units = range18,000
CLONK= Extension_4_0344(1) : Rem in case of other use
If CLONK>1 and CLONK<20 : Rem so missile doesn't 'hit' launching plane
Gosub TIDY : Rem to do plane or remove targets and update arrays
End If
End If
If Extension_4_0344(0)>1 Then Gosub KRUNCH
'
'Gosub WIPE : Rem use for extra speed if fast ram?
Extension_4_053C
Gosub HORIZON
Extension_4_0318
' Gosub SKY
'
Rem ink 2 goes behind hills,roads, not trees/ 4 behind hills/6 ditto/
'
' on runway changes ... when fairly near
If WX>96000 and WX<109000 : Rem exact 98000 and 107000
If WY>103400 and WY<108200 : Rem exact 105400 and 106200
Gosub RUUNWAY
End If
End If
'
If SPEED<65 and TAKEOFF=1 : Rem does a nose down at stallish speed
DROP=-65+SPEED
B=B+DROP
Extension_4_0100 0,-DROP
End If
'
Gosub BLOBS
'
Dec HOLD
If HOLD<0 Then Gosub MAP : HOLD=7 : Rem does map and work not needed every frame
If BANG=1 Then Gosub YAY
Pen HAPPEN
Locate 29,14 : Print DAMAGE/4;"%"
If GOTCHA=1 Then Gosub HITBITS
If SSHOW=-1 Then Locate 13,0 : Print "near boundary "
Paper 0
Pen 2
Locate 7,14 : Print SPEED*2;
'Locate 6,30 : Print POWER;" ";
YUK:
If Timer<3 Then Goto YUK
' Locate 0,0 : Print 50/Timer;
Timer=0
Doke $DFF0A6,250-(POWER*1.3) : Rem freq for whistle noise
' 250-(POWER*1.3)
'
Screen Swap
Wait Vbl
Until False
'.............................................................
' END LOOP END LOOP
'///////////////////////////////////////////////////////////////////////////
'///////////////////////////////////////////////////////////////////////////
SETUP:
'objects.. 0(view) 1 (missile), 18 runway, 19 (target plane), 20 sky
' from 2 up to number 13 ( 11 max ground objects)
' should be 3 spare (say 15,16,17, ?) for missile, more ememy or something
'
RT1=16384 : RT2=32768 : RT3=49152 : RT4=65536 : MOREOFF=0
STX=99000 : STY=105800 : STZ=60 : STC=RT1 : WZ=STZ : RAYNG=53000
ENMGOT=0 : ENMHIT=0 : DAMAGE=0 : RELSCALE=5000 : WINN=0 : FATAL=400
'
TRACK=0 : DIFFICULTY=45 : Rem 45 this is frames between replacing targets.
MISSION=1 : BOOST=0
TIMEBETWEEN=120 : Rem frames before enemy plane re appears start value 120
TRAIN=1 : ROOMX=STX-30000 : ROOMX2=STX+35000 : ROOMY=STY-30000 : ROOMY2=STY+30000
SPEED=0 : POWER=0 : TAKEOFF=0 : MISSTEP=20 : MISSMOVE=1000 : FUEL=RAYNG
GRIDSIZE=5000 : SIDE=0 : ENEMYSPEED=320 : HOLD=0 : ELIMIT=6000 : Rem 11000
'
GROBS=2 : Rem If GROBS<1 Then GROBS=1
MORRE=1 : RemIf GROBS=1 Then MORRE=2
DHEAD=6000 : If GROBS=2 Then DHEAD=3000 : FARHEAD=15000
NUMOBS=(GROBS+1)*(GROBS+1) : Rem objects 4 at grobs1, then 9 then 16
OLDOB=0 : OB=0 : Rem but note there are extra perimeter obs.
'
LIMROLL=12000 : Rem limit of roll!
LIMELEV=7000 : Rem limit elevation angle .. surprise
' Gosub SETOBS
'Hide
Degree
For X=0 To 360 : SYN#(X)=Sin(X) : COZN#(X)=Cos(X) : Next
Extension_4_04D6 D$+"objects"
Extension_4_0054 HYTE
'
Double Buffer
Autoback 0
'Screen Close 4
SPEED=0
DISPLACE=500000
Extension_4_0558
'
Extension_4_0016 "horizon"
Extension_4_0016 "jetplansim1"
Extension_4_0016 "missile1"
Extension_4_0016 "roadwd"
Extension_4_0016 "hedge"
Extension_4_0016 "road"
Extension_4_0016 "shortrd"
Extension_4_0016 "doublehedge"
Extension_4_0016 "paddock"
Extension_4_0016 "lowhill"
Extension_4_0016 "mountain2"
Extension_4_0016 "smallbuild"
Extension_4_0016 "squarepair"
Extension_4_0016 "mast3"
Extension_4_0016 "trepad"
' now obs for second set
Extension_4_0016 "runtriple"
Extension_4_0016 "urb1"
Extension_4_0016 "riverstrt"
Extension_4_0016 "rivercurve"
Extension_4_0016 "cliffedge"
Extension_4_0016 "cliffedge2x"
Extension_4_0016 "farm"
Extension_4_0016 "rounderhill"
Extension_4_0016 "village"
Extension_4_0016 "longhill"
'
'
OBS$(0)="roadwd"
OBS$(1)="hedge"
OBS$(2)="doublehedge"
OBS$(3)="paddock"
OBS$(4)="lowhill"
OBS$(5)="smallbuild"
OBS$(6)="mountain2"
OBS$(7)="squarepair"
OBS$(8)="mast3"
OBS$(9)="trepad"
'
'
OBS$(10)="runtriple"
OBS$(11)="rivercurve"
OBS$(12)="urb1"
OBS$(13)="riverstrt"
OBS$(14)="cliffedge"
OBS$(15)="farm"
OBS$(16)="cliffedge2x"
OBS$(17)="rounderhill"
OBS$(18)="village"
OBS$(19)="longhill"
Extension_4_0036 20,"horizon",5400,0,50,RT3,0,RT1
Extension_4_058A 20,-2
Extension_4_0036 19,"jetplansim1",30,60,1800,RT1,RT2+4000,0
Extension_4_0328 19,0,0,0,0,10
Extension_4_0328 0,0,0,0,0,400 : Rem for hit mount
'
Gosub CULOR
TURN=STC
Extension_4_01A6 0,RT3,0,STC
Extension_4_00EC 0,STX,STY,STZ
Flash Off
'
Gosub RAYN
Set Rainbow 0,0,600,"(45,-1,1)","(45,-1,1)","(40,-1,1)"
Rainbow 0,420,50+HYTE,145
'
Gosub STRUTS
Gosub DRECSHUN
Return
'==============================================================================
STICKREAD:
'
XFIRE=Joy(1)
MORE=0 : OLDB=B
If Jleft(1)=-1 Then Add A,-430 : Rem for roll was 300
If Jright(1)=-1 Then Add A,430
A=A-A/3 : Rem was /4
If Jup(1)=-1 and WZ>65 Then Add B,-200 : Rem for elevation down was 150
If Jdown(1)=-1 and SPEED>50 Then Add B,200 : Rem for up
B=B-B/3
' for plain a1200 a=600, b300 ,inertia /3
Return
'====================================================================
KEYBOARD:
'
'
If F$="a" and POWER<90 and FUEL>2300
Add POWER,1
End If
'
If F$="s" and POWER>0
Add POWER,-1
If POWER<5 : POWER=0 : End If
End If
'
If SPEED<0 Then SPEED=0
If SPEED>450 Then SPEED=450
'
If F$="x"
RELSCALE=RELSCALE+1500
If RELSCALE>5000 : RELSCALE=5000 : End If
Gosub RELTARGETS
End If
If F$="z"
RELSCALE=RELSCALE-1500
If RELSCALE<2000 : RELSCALE=2000 : End If
Gosub RELTARGETS
End If
'
If F$="l" Then Gosub LOWED
If F$="p"
Autoback 1 : Locate 15,2 : Print "PAUSED" : Autoback 0
Volume 0
Wait Key : K=Timer
End If
If F$="c" Then Volume 0 : End
If F$="4"
Extension_4_01A6 19,RT1,RT2+EBNK,CAT+RT2
EHEAD=CAT+RT2
Extension_4_00EC 19,WX,WY,WZ : Extension_4_0100 19,4000
End If
If F$="1" Then MAPTYPE=0
If F$="2" Then MAPTYPE=1
If F$="3" Then MAPTYPE=2
If F$="k" Then Gosub KALASET
If F$="d" Then Gosub DSOBS
If F$="," Then DHEAD=DHEAD-500
If F$="." Then DHEAD=DHEAD+500
If F$="8" Then Gosub NEWPLANE
If F$="m"
Add TIMEBETWEEN,20
If TIMEBETWEEN>180 : TIMEBETWEEN=180 : End If
Autoback 1 : Locate 5,20 : Print TIMEBETWEEN;" " : Autoback 0
End If
If F$="n"
Add TIMEBETWEEN,-20
If TIMEBETWEEN<0 : TIMEBETWEEN=0 : End If
Autoback 1 : Locate 5,20 : Print TIMEBETWEEN;" " : Autoback 0
End If
'
If F$="r" Then Gosub AGAIN : Rem ...... reset if plane lost
Return
'========================================================================
ADJUSTVW:
'
'
'
UUZ1#=COZN#(BAT/182) : Rem angle B is roll, angle A elevation
UUZ2#=SYN#(BAT/182)
UUZ3#=COZN#(AAT/182)
ERK#=UUZ1#*UUZ1#*UUZ1#
' INVERT=1 : If BAT>RT1 and BAT<RT3 Then INVERT=-1
'
GOING=GOING+B : Rem non-roll control
' GOING=GOING+(B*Abs(erk#))*INVERT : Rem alternate roll control
' above extra uuz1#'s to stop joy up/down changing attitude too much
' when applied in bank and showing once it comes back level
'
If GOING>LIMELEV-500 : B=B/4 : End If : Rem these slow then stop elevation change
If GOING>LIMELEV : GOING=LIMELEV : End If
If GOING<-LIMELEV+500 : B=B/4 : End If
If GOING<-LIMELEV : GOING=-LIMELEV : End If
If WZ>5500 and GOING>0
GOING=GOING-200 : B=-150 : Rem to limit altitude
End If
'
If TAKEOFF=1
TURN=TURN+(500*UUZ2#)+(A*Abs(UUZ3#)) : Rem non roll control
' ^for auto turn ^ for correction of initial skew when nose
' pointed up or down
'TURN=TURN+(200*UUZ2#)+(B*UUZ2#) : Rem alternate roll control
' above provides increasing auto turn on bank + joystick up /down extra
'
ROLL=ROLL+A
If ROLL>LIMROLL-2000 : A=A/4 : End If : Rem rem these out for roll style
If ROLL<-LIMROLL-2000 : A=A/4 : End If : Rem control system
If ROLL>LIMROLL : ROLL=LIMROLL : End If
If ROLL<-LIMROLL : ROLL=-LIMROLL : End If
End If
'
'
' ELEVATION=GOING*UUZ1# : Rem For roll control System uuz1# to reverse vert 'screw'
'
THING=(GOING/3)*ERK# : Rem this reduces roll caused lunge at elevation extremes
ELEVATION=GOING-THING : Rem non roll system
'
Extension_4_01A6 0,RT3+ELEVATION,ROLL,TURN
Extension_4_0100 0,SPEED
' ..........................
'
AAT= Extension_4_01BC(0)
BAT= Extension_4_01D0(0)
CAT= Extension_4_01E4(0)
WX= Extension_4_0114(0) : WY= Extension_4_0128(0) : WZ= Extension_4_013C(0)
'
Return
'=====================================================================
LAUNCH:
'
Volume %10,40 : Sam Play %10,2,16000
Extension_4_0036 1,"missile1",WX,WY,WZ-200,AAT,BAT,CAT
Extension_4_0328 1,0,0,0,1000,1000
Extension_4_0328 1,1,0,0,-1000,1000
Extension_4_0328 1,2,0,0,0,1000
Extension_4_0100 1,300
GUH=1
'
Return
'
'==============================================================
SKY: Rem test one only
Ink 9
TH=BAT/50
If BAT>RT2 Then TH=-(RT4-BAT)/50
If TH<-140 Then TH=-140
If TH>140 Then TH=140
Polygon 2,2 To 318,2 To 318,50-TH To 2,50+TH To 2,2
Return
'==================================================================
HORIZON:
Extension_4_00EC 20,WX,WY,WZ+157
Extension_4_01A6 20,RT3,0,CAT
Extension_4_0100 20,160
Return
'===========================================================
STRUTS:
Hide
Set Sprite Buffer 250
Get Sprite 2,3,100,60 To 108,185 : Rem left strut
Get Sprite 2,4,155,73 To 170,160 : Rem sight
HUD=1
'
For FT=0 To 12 Step 4
Colour 17+FT,$555 : Rem sprite colour
Colour 18+FT,$0 : Rem odd blue bit?
Colour 19+FT,$0 : Rem
Next
Return
'===========================================================================
CULOR:
' ...... greenish landscape......
Colour 0,$573 : Rem backgrnd=ground was683
Colour 1,$121 : Rem cpit deep radar back ground
Colour 2,$343 : Rem cpit grey
Colour 3,$ED9 : Rem cpit bright
Colour 4,$885 : Rem cpit mid surface
Colour 5,$4F5 : Rem cpit green marks
Colour 6,$2FF : Rem map pilot position and arrow
Colour 7,$FF0 : Rem map airport
' ....... objects........
Colour 8,$164 : Rem trees double side 154
Colour 9,$488 : Rem sky 7cd .488 blends better 3d depth or 49A
Colour 10,$8A8 : Rem 8a9 road top (& a field), building wall airstrip abb
Colour 11,$685 : Rem distant blobs + top of cliffy thing 585
Colour 12,$896 : Rem field and build top bright face mount 896
Colour 13,$257 : Rem
Colour 14,$465 : Rem shadow -dark 375
' extra
Colour 15,$F28 : Rem enemy and target position spots and Power
Return
'=====================================================================
SPOTS:
CHEEX=WX and 8192
CHEEY=WY and 8192
If LOCK<1
If CHEEX=8192 or CHEEY=8192
OLDEX= Extension_4_03BA(0,0,0,30000)
OLDEY= Extension_4_03C8
LOCK=15
End If
End If
'
Dec LOCK
Ink 6
For PX=-10240 To 10240 Step 8192
For PY=-10240 To 10240 Step 8192
USEX= Extension_4_0474(OLDEX+PX,OLDEY+PY,0)
USEY= Extension_4_0480
Plot USEX,USEY : Plot USEX+1,USEY : Plot USEX+3,USEY
Next PY
Next PX
Return
'==========================================================================
SETOBS: Rem .......does rnd obs on test
OB1=2
For Y=0 To 40
For X=0 To 40
OBN(X,Y)=Rnd(10)
OBX(X,Y)=(X*GRIDSIZE)
OBY(X,Y)=(Y*GRIDSIZE)
Next X
Next Y
Return
'========================================================================
EXOBS: Rem this is to do distant perimeter selected obs
' only in the direction of travel
' 0=roads 6 =high mounts 8=target 11 water 13 water
If DX>OX
TEX=DX+GROBS+1
'
For TEY=DY-1 To DY+GROBS+1
If TEX>-1 and TEX<41 and TEY>-1 and TEY<41
TMP=OBN(TEX,TEY)
If TMP=0 or TEMP=6 or TEMP=8 or TEMP=11 or TEMP=13
Extension_4_0036 OB,OBS$(TMP),OBX(TEX,TEY),OBY(TEX,TEY),0,RT1,RT2,CAN(TEX,TEY)
Inc OB
End If
End If
Next TEY
End If
'
'
If DX<OX
TEX=DX-1
For TEY=DY-1 To DY+GROBS+1
If TEX>-1 and TEX<41 and TEY>-1 and TEY<41
TMP=OBN(TEX,TEY)
If TMP=0 or TEMP=6 or TEMP=8 or TEMP=11 or TEMP=13
Extension_4_0036 OB,OBS$(TMP),OBX(TEX,TEY),OBY(TEX,TEY),0,RT1,RT2,CAN(TEX,TEY)
Inc OB
End If
End If
Next TEY
End If
'
'
If DY>OY
TEY=DY+GROBS+1
For TEX=DX-1 To DY+GROBS+1
If TEX>-1 and TEX<41 and TEY>-1 and TEY<41
TMP=OBN(TEX,TEY)
If TMP=0 or TEMP=6 or TEMP=8 or TEMP=11 or TEMP=13
Extension_4_0036 OB,OBS$(TMP),OBX(TEX,TEY),OBY(TEX,TEY),0,RT1,RT2,CAN(TEX,TEY)
Inc OB
End If
End If
Next TEX
End If
'
If DY<OY
TEY=DY-1
For TEX=DX-1 To DY+GROBS+1
If TEX>-1 and TEX<41 and TEY>-1 and TEY<41
TMP=OBN(TEX,TEY)
If TMP=0 or TEMP=6 or TEMP=8 or TEMP=11 or TEMP=13
Extension_4_0036 OB,OBS$(TMP),OBX(TEX,TEY),OBY(TEX,TEY),0,RT1,RT2,CAN(TEX,TEY)
Inc OB
End If
End If
Next TEX
End If
Return
'========================================================================
OBNS2: Rem .... this does MAIN OBJECTS
WATT=0 : Rem to count no of mounts used
If OB>2
For R=2 To OB-1 : Extension_4_0090 R : Next
End If
SSHOW=1 : If DY<0 or DX<0 or DY>40 or DX>40 Then SSHOW=-1
OB=2
For TEX=DX+OFFX To DX+GROBS+OFFX
For TEY=DY+OFFY To DY+GROBS+OFFY
If TEX>-1 and TEX<41 and TEY>-1 and TEY<41
TMP=OBN(TEX,TEY)
If TMP<20 and TMP<>10
Extension_4_0036 OB,OBS$(TMP),OBX(TEX,TEY),OBY(TEX,TEY),0,RT1,RT2,CAN(TEX,TEY)
'
If TMP=8 : Rem if target
Extension_4_0328 OB,0,0,0,0,50
End If
'
If TMP=6 : Rem if mount
Inc WATT
Extension_4_0328 OB,0,0,1000,0,1400
End If
'
Inc OB
End If
End If
Next TEY
Next TEX
Gosub EXOBS
'OLDOB=OB
Return
'=================================================================
' maps and all the stuff to save time, not done every frame
MAP:
If ENMGOT>2 : ECHECK=90 : EBNK=Rnd(40000)-20000 : End If
' above skews shot down plane
If TRACK=ACOUNT : WINN=1 : End If : Rem if all targets eliminated
'
HAPPEN=2
If FAROUT<2 and FAROUT>-1 Then Inc DAMAGE : HAPPEN=15 : Rem enemy scores if left free on area
If DAMAGE>FATAL Then Gosub LOSE
'
FUEL=FUEL-POWER
If FUEL<2300 Then POWER=0
USEFUEL=180-(FUEL/2500)
Gosub RESTATE : Rem check for target replace, or if all gone
'
Doke $DFF0D6,350-(SPEED/2) : Rem was 350-(speed/2) freq
Doke $DFF0C6,320-(SPEED/2) : Rem was 320-(speed/2)
Volume %1000,28+(SPEED/40) : Rem for air roar 28
If WHOLD<1 : Rem to allow use for explode noise
Volume %100,20+(SPEED/40) : Rem for air roar 20
End If
Volume %1,20+(POWER/3) : Rem for whistle
If SPEED<1 Then Volume %1001,12
'
' to have runway more reliable yet vanish at distance
If WX>ROOMX and WX<ROOMX2 and WY>ROOMY and WY<ROOMY2 and HAVE=0
Extension_4_0036 18,OBS$(10),GRIEFX,GRIEFY,0,RT1,RT2,GRIEFC : HAVE=1
End If
If HAVE=1
If WX<ROOMX or WX>ROOMX2 or WY<ROOMY or WY>ROOMY2
Extension_4_0090 18 : HAVE=0 : Rem runway out of reasonable distance
End If
End If
'
US=(CAT+RT2)/1820
ENX= Extension_4_0114(19)/5000 : Rem enemy plane grid position
ENY= Extension_4_0128(19)/5000
BOOST=0
If ENX>38 or ENX<2
Gosub CHANGE : Rem if near edge
End If
If ENY>38 or ENY<2
Gosub CHANGE
' to change enemy
End If : Rem when going out of area
'
If MAPTYPE=1 Then Gosub RELMAP : Return
If MAPTYPE=2 Then Gosub RELTARGETS : Return
If ENY<1 Then ENY=1
If ENY>39 Then ENY=39
If ENX<1 Then ENX=1
If ENX>39 Then ENX=39
'
MX=WX/GRIDSIZE
If MX<1 Then MX=1
If MX>39 Then MX=39
'
MY=WY/GRIDSIZE
If MY<1 Then MY=1
If MY>39 Then MY=39
'
TEMPP=POWER/4
Paste Bob 90,150,24
Ink 6
' Plot 90+OMY,190-OMX : Rem y acts as x and vice versa for 90' rotate
Plot 90+MY,190-MX : Plot 90+MY,191-MX
Plot 91+MY,190-MX : Plot 91+MY,191-MX
Ink 1 : Draw 204,159 To 204,USEFUEL : Rem fuel bar
Ink 15
Draw 180,180 To 180,180-TEMPP
If BOOST=0
Plot 90+ENY,190-ENX : Plot 91+ENY,190-ENX
Plot 90+ENY,191-ENX : Plot 91+ENY,191-ENX
End If
Ink 6
Draw YUKX-DRX(US-2),YUKY-DRY(US-2) To YUKX+DRX(US),YUKY+DRY(US)
Draw YUKX-DRX(US+2),YUKY-DRY(US+2) To YUKX+DRX(US),YUKY+DRY(US)
Ink 1
Draw 180,158 To 180,179-TEMPP
Screen Swap
'
Paste Bob 90,150,24
If BOOST=0
Ink 15
Plot 90+ENY,190-ENX : Plot 91+ENY,190-ENX
Plot 90+ENY,191-ENX : Plot 91+ENY,191-ENX
End If
Ink 6
Draw YUKX-DRX(US-2),YUKY-DRY(US-2) To YUKX+DRX(US),YUKY+DRY(US)
Draw YUKX-DRX(US+2),YUKY-DRY(US+2) To YUKX+DRX(US),YUKY+DRY(US)
Ink 1 : Draw 204,159 To 204,USEFUEL : Rem fuel bar
Ink 15
Plot 90+MY,190-MX : Plot 90+MY,191-MX
Plot 91+MY,190-MX : Plot 91+MY,191-MX
Draw 180,180 To 180,180-TEMPP
Ink 1
Draw 180,158 To 180,179-TEMPP
Screen Swap
'
'
' OMX=MX2 : OMY=MY2:rem to delay and thence space dots directionaly
' MX2=MX : MY2=MY
Return
'===================================================================
FIRSTOB:
OB=2
For TEX=DX To DX+GROBS
For TEY=DY To DY+GROBS
Extension_4_0036 OB,OBS$(OBN(TEX,TEY)),OBX(TEX,TEY),OBY(TEX,TEY),0,RT1,RT2,CAN(TEX,TEY)
Inc OB
Next TEY
Next TEX
Return
'=====================================================================
' for manual selection of land data source
LOWED:
Screen 4 : Screen To Front 4
Cls 1 : Show : Pen 13
Print "This is to select the arrays needed "
Print "for the 'world' from disk "
Print "It will recognize the names starting;- "
Print " OBN, OBX, OBY, CAN "
Print " A 2 place ident. tag after the "
Print "letters will be used to load all arrays "
Print
Print " Press a key to continue "
Wait Key
TEMP$=Dir$
F$=Fsel$("")
If F$="" Then Goto SKIP
TMP$=Right$(F$,5) : OTHER$=Right$(F$,2)
USE$=Left$(TMP$,3)
If USE$="OBN" Then Gosub INDATA : Goto SKIP
If USE$="OBX" Then Gosub INDATA : Goto SKIP
If USE$="OBY" Then Gosub INDATA : Goto SKIP
If USE$="CAN" Then Gosub INDATA : Goto SKIP
SKIP:
Dir$=TEMP$
Screen 3 : Screen To Front 3
Hide
Gosub OBNS2
Return
'=======================================================================
INDATA:
'TEMP$=Dir$ : Rem this and below was done for quick load/ program developement
'Dir$="WORK:amos/amosbanks/"
OTHER$="01"
Bload D$+"banks/"+"OBN"+OTHER$,Varptr(OBN(0,0))
Bload D$+"banks/"+"OBX"+OTHER$,Varptr(OBX(0,0))
Bload D$+"banks/"+"OBY"+OTHER$,Varptr(OBY(0,0))
Bload D$+"banks/"+"CAN"+OTHER$,Varptr(CAN(0,0))
'Dir$=TEMP$
Gosub OBNS2
Gosub DETAILMAP
K=Timer
Return
'
'=====================================================================
' If Error tests
REGARD:
Cls : Locate 10,10
Print OBS$(OBN(TEX,TEY))
Print TEX;OB;R
Screen Swap : Wait Key
End
'===================================================
CHICK:
CNT=0
If OB>2
For GL=2 To OB-1
If Extension_4_006C(GL)=0
Inc CNT
End If
Next GL
End If
Return
'========================================================================
'
RAYN:
Set Rainbow 1,0,160,"","",""
RD=5 : GN=7
For N=0 To 45 : Rain(1,N)=(RD*256)+(GN*16)+8 : Next
For N=45 To 75 : Rain(1,N)=(RD*256)+(GN*16)+7 : Next
For N=75 To 90 : Rain(1,N)=(RD*256)+(GN*16)+6 : Next
For N=90 To 100 : Rain(1,N)=(RD*256)+(GN*16)+5 : Next
For N=100 To 135 : Rain(1,N)=(RD*256)+(GN*16)+4 : Next
Rain(1,43)=(RD*256)+(GN*16)+7
Rain(1,41)=(RD*256)+(GN*16)+7
Rain(1,39)=(RD*256)+(GN*16)+7
Rain(1,73)=(RD*256)+(GN*16)+6
Rain(1,71)=(RD*256)+(GN*16)+6
Rain(1,69)=(RD*256)+(GN*16)+6
Rain(1,88)=(RD*256)+(GN*16)+5
Rain(1,86)=(RD*256)+(GN*16)+5
Rain(1,84)=(RD*256)+(GN*16)+5
Rain(1,98)=(RD*256)+(GN*16)+4
Rain(1,96)=(RD*256)+(GN*16)+4
Rain(1,94)=(RD*256)+(GN*16)+4
Rainbow 1,0,40,120
Return
'
'==========================================================================
'
DETAILMAP:
Screen 4
Wait 2
Gosub CULOR
For F=25 To 27
Cls 13
YUK=2000
If F=26 Then YUK=4000
If F=27 Then YUK=6000
Ink 9 : Circle 20,20,(MISSTEP*MISSMOVE)/YUK
Plot 20,16-(MISSTEP*MISSMOVE)/2000
Plot 20,18-(MISSTEP*MISSMOVE)/2000
Plot 20,22-(MISSTEP*MISSMOVE)/2000
Plot 20,24-(MISSTEP*MISSMOVE)/2000
Plot 20,26-(MISSTEP*MISSMOVE)/2000
Ink 6 : Plot 20,20
Ink 1 : Bar 41,1 To 59,40
Get Bob 4,F,0,0 To 56,42 : Rem for relative map
Next
'
Cls 13
For Y=0 To 40
For X=0 To 40
If OBN(X,Y)=0 : Rem roads
Ink 12
Plot Y,40-X : Rem y acts as x and vice versa
End If
'
If OBN(X,Y)=4 or OBN(X,Y)=6 : Rem low or high hill
Ink 1
Plot Y,40-X
End If
'
If OBN(X,Y)=12 or OBN(X,Y)=18 : Rem village or urban
Ink 5
Plot Y,40-X
End If
'
If OBN(X,Y)=10 : Rem airport and to get x,y for rel map spot
AIRX=OBX(X,Y)
AIRY=OBY(X,Y)
Ink 7
Plot Y,40-X
Plot Y,41-X
End If
'
If OBN(X,Y)=8 : Rem mast target
Ink 15
Plot Y,40-X
End If
'
If OBN(X,Y)=11 or OBN(X,Y)=13 : Rem water course
Ink 9
Plot Y,40-X
End If
Next X
Next Y
Ink 1
Draw 41,0 To 41,41
Circle 49,8,7
Paint 49,8
Get Bob 4,24,0,0 To 56,42
'Cls 1
Screen 3
Wait 2
Return
'=======================================================================
DRECSHUN: Rem to make simplified direction cos/sin for map
YUKX=138 : YUKY=158
Degree
For US=1 To 56
DRX(US)=(Cos(US*10))*4
DRY(US)=(Sin(US*10))*4
Next
Return
'====================================================================
WIPE:
Fill Logbase(0) To Logbase(0)+WIPEOUT,$0
Fill Logbase(1) To Logbase(1)+WIPEOUT,$0
Fill Logbase(2) To Logbase(2)+WIPEOUT,$0
Fill Logbase(3) To Logbase(3)+WIPEOUT,$0
Return
'
'
'
'================================================================
' add distant background spots
BLOBS:
If HAVEOBS=1 Then Return
If WATT>2 Then Return : Rem if at least 3 mountains no blobs
For NORTH=FARX-2 To FARX+1
For WEST=FARY-1 To FARY+2
If NORTH>-1 and NORTH<41 and WEST>-1 and WEST<41
TMP=OBN(NORTH,WEST)
POSX= Extension_4_0474(OBX(NORTH,WEST),OBY(NORTH,WEST),0)
POSY= Extension_4_0480
' If TMP=5 : Rem mountain use large?
' Td Background 1,20,0,40,30 To POSX-20,POSY-30
' End If
Extension_4_049E 1,0,0,3,2 To POSX,POSY
End If
Next WEST
Next NORTH
Return
'=====================================================
KALASET:
Clear Key
Autoback 1
KULA0=Colour(0)
KULA1=Colour(1) : KULA2=Colour(2)
KULA3=Colour(3) : KULA4=Colour(4)
KULA5=Colour(5) : KULA6=Colour(6)
KULA7=Colour(7)
' then 3d obs colour
KULA8=Colour(8)
KULA9=Colour(9) : KULA10=Colour(10)
KULA11=Colour(11) : KULA12=Colour(12)
KULA13=Colour(13) : KULA14=Colour(14)
KULA15=Colour(15)
Gosub SCRNSET
Do
MC=Mouse Click
If MC=1
'Locate 20,10 : Print X Mouse;" ";(Y Mouse-50)/8
TEMMP=((Y Mouse-50)/8)+1 : Rem +1 is to set on this screen
WHOLE=Colour(TEMMP)
Locate 10,9 : Print WHOLE;
RED=WHOLE/256
OVER=WHOLE-(RED*256)
GRN=(OVER)/16
BLU=OVER-(GRN*16)
' Print RED;GRN;BLU;" "
' Print " -";(RED*256)+(GRN*16)+BLU
End If
K$=Inkey$
If K$="e" Then Exit
If K$="w" Then RED=RED+1
If K$="q" Then RED=RED-1
If RED>15 Then RED=15
If RED<0 Then RED=0
If K$="s" Then GRN=GRN+1
If K$="a" Then GRN=GRN-1
If GRN>15 Then GRN=15
If GRN<0 Then GRN=0
If K$="x" Then BLU=BLU+1
If K$="z" Then BLU=BLU-1
If BLU>15 Then BLU=15
If BLU<0 Then BLU=0
Locate 20,10 : Print Hex$(RED);" ";Hex$(GRN);" ";Hex$(BLU);" ";
Colour TEMMP,(RED*256)+(GRN*16)+BLU
Loop
Hide
Autoback 0
Return
'==================================================================-
SCRNSET:
For V=0 To 126 Step 8
Paper 0 : Pen 1 : Locate 0,(V/8) : Print V/8;
Ink V/8 : Bar 35,V To 70,V+8
Next V
Screen Swap
Show
' Wait Key
Return
'==================================================================
HEADUP:
If HUD=0
Sprite 2,220,41,3
Sprite 4,350,41,3
Sprite 6,281,41,4
HUD=1
Return
End If
If HUD=1
Sprite Off
HUD=0
End If
Return
'
'
'==================================
' /?????
DSOBS:
If HAVEOBS=1 Then HAVEOBS=0 : Return
If HAVEOBS=0 Then HAVEOBS=1 : Return
Return
'
'================================================================
' action on runway
RUUNWAY:
If WZ>150 Then Return
'
If Jleft(1)=-1 Then Add TURN,-60 : Rem for ground turn
If Jright(1)=-1 Then Add TURN,60
'
If TAKEOFF=1 and GOING>-2500 and GOING<0 and SPEED<95
If WZ<120
B=0 : GOING=-100+GOING/2 : ROLL=ROLL/2
End If
If WZ<65 : Rem if not too steep or fast
B=0 : Rem level out and land
GOING=0 : ROLL=0 : TAKEOFF=0
End If
End If
'
If SPEED<1
If MOREOFF=1 and WZ<65
Wait 50
FUEL=RAYNG : Rem refuel on successful landing
Ink 6 : Draw 204,160 To 204,180 : Rem fuel bar
Locate 10,5 : Print " refuelling...."
Screen Swap
Ink 6 : Draw 204,160 To 204,180 : Rem fuel bar
Wait 200
Locate 10,5 : Print " O.K. .. done. "
Screen Swap
Wait 100
Locate 10,5 : Print " ."
MOREOFF=0
End If
End If
'
If WZ>65 or WX>107000 or WY>115000 Then TAKEOFF=1 : MOREOFF=1
Ink 12
For G=0 To 60
SCNX1= Extension_4_0474(LINX(G),LINY(G),0)
SCNY1= Extension_4_0480
'
If SCNX1>0 and SCNY1>0
SCNX2= Extension_4_0474(LINX2(G),LINY(G),0)
SCNY2= Extension_4_0480
If SCNX2>0 and SCNY2>0
Draw SCNX1,SCNY1 To SCNX2,SCNY2
End If
End If
Next
Return
'
'==============================================================
' add lines positions to airstrip arrays
LINES:
For G=0 To 69
LINX(G)=STX+Rnd(8300)
LINY(G)=STY-350+Rnd(600)
LINX2(G)=LINX(G)+200+Rnd(200)
LINY2(G)=LINY(G)
Next G
Return
'==========================================================
' if below ground
KRUNCH:
Volume %110,63 : Sam Play %110,3,9000
Volume %1001,0
Fade 5
For C=0 To 20
Extension_4_053C
Extension_4_018C 0,Q,R,R
Extension_4_0318
Screen Swap
Wait Vbl
'Q=Rnd(-200)
R=Rnd(15000)
Next C
Cls 1,0,0 To 320,120
Volume 0
Sam Play %100,1,15000 : Rem roar out of sync back on
Wait 20
Locate 13,9 : Print " "
Locate 13,10 : Print " Cruunch!! "
Locate 13,11 : Print " I'm afraid "
Locate 13,12 : Print " it's all over "
Locate 13,13 : Print " "
Locate 13,14 : Print " resetting.. "
Screen Swap : Wait 200
Gosub AGAIN
Gosub CULOR
Return
'=================================================================
' move hit targets and remove from map and arrays
TIDY:
If CLONK=19
BANG=1 : Wait 1 : Rem and any other plane hitstuff.. improve?!
Inc ENMGOT : Rem why is the wait above??
AWK=(Rnd(4)-2)*100 : If AWK=0 : AWK=200 : End If
Extension_4_00D4 19,0,0,AWK
Extension_4_018C 19,0,AWK*80,0
EBNK=EBNK-AWK*80
If ENMGOT=2
If TYMUP>-80
TYMUP=TYMUP-90 : Rem to delay replacing targets as well
End If
If FAROUT>-320
FAROUT=FAROUT-330 : Rem to delay return of plane
End If
Inc ENMHITS
GOTCHA=1
End If
Return
End If
'
TEMPX= Extension_4_0114(CLONK)/5000
TEMPY= Extension_4_0128(CLONK)/5000
If OBN(TEMPX,TEMPY)<>8 Then Return : Rem if not target
'
BANG=1 : Rem so there's an explosion
OBN(TEMPX,TEMPY)=65 : Rem so it can be identified to replace
Extension_4_00EC CLONK,0,0,500000 : Rem move target out of sight till next replace
Screen 4
Ink 13
Plot TEMPY,40-TEMPX : Rem blot out target on bob source
'
Gosub STATE : Rem to save hit position in order for time based replace
Get Bob 4,24,0,0 To 56,42 : Rem get new bob with target removed
Screen 3
'
For G=0 To ACOUNT : Rem move target out of sight in source target array
If TARGX(G)=OBX(TEMPX,TEMPY)
TARGX(G)=990000
End If
Next G
Return
'=========================================================
' to restore targets to large original array
RETARGET:
For X=0 To 40
For Y=0 To 40
If OBN(X,Y)=65
OBN(X,Y)=8
End If
Next
Next
Return
'===================================
' to reset to runway or after crash
AGAIN:
Extension_4_00EC 19,0,0,3000
Extension_4_01A6 0,RT3,0,STC : SPEED=0
Extension_4_00EC 0,STX,STY,STZ : ROLL=0 : TURN=STC : GOING=0 : C1=0 : FUEL=RAYNG
C2=0 : B=0 : A=0 : MORETURN=0 : POWER=0 : DROP=0 : TAKEOFF=0 : MAPTYPE=0
ENMGOT=0 : ENMHIT=0 : DAMAGE=0 : RELSCALE=5000
MOREOFF=0 : TYMUP=0 : TRACK=0
For FT=0 To 12 Step 4
Colour 17+FT,$555 : Rem sprite colour
Colour 18+FT,$0 : Rem odd blue bit?
Colour 19+FT,$0 : Rem
Next
Autoback 1 : Locate 5,20 : Print TIMEBETWEEN;" "
Ink 6 : Draw 204,160 To 204,180 : Rem fuel bar
Autoback 0
Gosub RETARGET
Gosub MAKETARGET
Gosub DETAILMAP
HOLD=1
Return
'
'================================================================
' to update map if target hit
MAPTARG:
Screen 4
Get Bob 4,24,0,0 To 56,42
Return
'===========================================================
' reset roll attitude of enemy plane
PLANEADJUST:
'
EBNK=EBNK+ECHNG
If EBNK>ELIMIT Then EBNK=ELIMIT
If EBNK<-ELIMIT Then EBNK=-ELIMIT
EHEAD= Extension_4_01E4(19)-(EBNK/20) : Rem ehead is world direction
Extension_4_01A6 19,RT1,RT2+EBNK,EHEAD
If GOTCHA=1 Then Extension_4_018C 19,-4000,0,0
Extension_4_0100 19,ENEMYSPEED+BOOST
If Extension_4_013C(19)<-300
GOTCHA=0
ENMGOT=0
Extension_4_00EC 19,-800000,-800000,3000
End If
Return
'
'=======================================================================
NEWPLANE: Rem to set plane incoming from random position
Extension_4_00EC 19,100000,100000,300+Rnd(4000)
EHEAD=Rnd(65000)
Extension_4_01A6 19,RT1,RT2,EHEAD
Extension_4_0100 19,-60000 : Rem should point to centre
EBNK=0 : ECHNG=0 : Rem set level
ECHECK=80+Rnd(80) : Rem min frames inward before change 24000vdu + rnd
ENMGOT=0
Return
'==============================================================
ENEW:
ECHECK=3+Rnd(15) : Rem frames before change
ECHNG=Rnd(2000)-1000 : Rem rate of change
Return
'====================================================================
' rel map for airborne target and airport
RELMAP:
EN1X= Extension_4_0114(19)
EN1Y= Extension_4_0128(19)
Extension_4_01A6 0,RT3,0,CAT
MAPX1= Extension_4_0454(0,EN1X,EN1Y,0)/2000
MAPY1= Extension_4_0408 /2000
If MAPX1>20 Then MAPX1=20
If MAPX1<-20 Then MAPX1=-20
If MAPY1>20 Then MAPY1=20
If MAPY1<-20 Then MAPY1=-20
APX1= Extension_4_0454(0,AIRX,AIRY,0)/2000
APY1= Extension_4_0408 /2000
If APX1>20 Then APX1=20
If APX1<-20 Then APX1=-20
If APY1>20 Then APY1=20
If APY1<-20 Then APY1=-20
Paste Bob 90,150,25
Ink 7 : Plot 110+APY1,170-APX1
If BOOST=0 Then Ink 15 : Plot 110+MAPY1,170-MAPX1
TEMPP=POWER/4
Ink 15 : Draw 180,180 To 180,180-TEMPP
Ink 1
Draw 204,159 To 204,USEFUEL : Rem fuel bar
Draw 180,158 To 180,179-TEMPP
'
Screen Swap
Paste Bob 90,150,25
Ink 7 : Plot 110+APY1,170-APX1
If BOOST=0 Then Ink 15 : Plot 110+MAPY1,170-MAPX1
Ink 15 : Draw 180,180 To 180,180-TEMPP
Ink 1
Draw 204,159 To 204,USEFUEL : Rem fuel bar
Draw 180,158 To 180,179-TEMPP
'
Screen Swap
Extension_4_01A6 0,AAT,BAT,CAT
Return
'==============================================================
' to make targets array for ground relmap
MAKETARGET:
ACOUNT=0
For X=0 To 40
For Y=0 To 40
If OBN(X,Y)=8
TARGX(ACOUNT)=OBX(X,Y)
TARGY(ACOUNT)=OBY(X,Y)
Inc ACOUNT
If ACOUNT>20
Cls
Locate 0,4
Print "this data has more than 20 targets"
Print "- won't work on this program!"
Volume 0
Screen Swap
Wait 100
End
End If
End If
Next
Next
Return
'===================================
' draw rel view map for ground targets
RELTARGETS:
Autoback 1
If RELSCALE=5000 Then USEBOB=27
If RELSCALE=3500 Then USEBOB=26
If RELSCALE=2000 Then USEBOB=25
Paste Bob 90,150,USEBOB
TEMPP=POWER/4
Ink 15 : Draw 180,180 To 180,180-TEMPP
Ink 1 : Draw 204,159 To 204,USEFUEL : Rem fuel bar
Draw 180,158 To 180,179-TEMPP
'
'
Extension_4_01A6 0,RT3,0,CAT
Ink 15
For P=0 To ACOUNT-1
If TARGX(P)<900000
MPX= Extension_4_0454(0,TARGX(P),TARGY(P),0)/RELSCALE
MPY= Extension_4_0408 /RELSCALE
If MPX>20 : MPX=20 : End If
If MPX<-20 : MPX=-20 : End If
If MPY>20 : MPY=20 : End If
If MPY<-20 : MPY=-20 : End If
Plot 110+MPY,170-MPX
TMPY(P)=110+MPY : TMPX(P)=170-MPX
End If
Next
Extension_4_01A6 0,AAT,BAT,CAT
Autoback 0
Return
'=========================================================
LOSE:
Locate 0,0
Print " Whoops, curses. "
Print " They wiped out your defences "
Print " But then, who cares? "
Print " "
Print " Hit a key to restart "
Screen Swap
Wait Key
DAMAGE=0
Gosub AGAIN
Return
'===================================================================
' for explosion
YAY:
If GUH<MISSTEP and GUH>0
NEEDX= Extension_4_0114(1)
NEEDY= Extension_4_0128(1)
NEEDZ= Extension_4_013C(1)
USEX= Extension_4_0474(NEEDX,NEEDY,NEEDZ)
USEY= Extension_4_0480
If USEX>0 and USEY>0
'
For H=0 To 30
TEMPX=USEX-45+Rnd(90)
TEMPY=USEY-20+Rnd(40)
If TEMPY<125 and TEMPY>1 and TEMPX<319 and TEMPX>1
Plot TEMPX,TEMPY,Rnd(16)
End If
Next
For H=0 To 50
TEMPX=USEX-20+Rnd(40)
TEMPY=USEY-12+Rnd(24)
If TEMPY<125 and TEMPY>1 and TEMPX<319 and TEMPX>1
Plot TEMPX,TEMPY,Rnd(16)
End If
Next
End If
Volume %110,63 : Sam Play %110,3,9000 : WHOLD=13
BANG=0
Extension_4_0090 1 : GUH=0 : Rem kill missile and turn off move check
End If
'
Return
'=======================================================================
' to find and make permanent air strip object number 18
AIR:
For X=0 To 40
For Y=0 To 40
If OBN(X,Y)=10
GRIEFX=OBX(X,Y) : GRIEFY=OBY(X,Y) : GRIEFC=CAN(X,Y)
'Td Object 18,OBS$(10),OBX(X,Y),OBY(X,Y),0,RT1,RT2,CAN(X,Y)
OBN(X,Y)=40
End If
Next
Next
Return
'======================================================================
' comes here if enemy outside map limits
CHANGE:
'
ECHECK=200 : EBNK=0 : ECHNG=0 : Rem set plane level and accelerate
BOOST=600
Extension_4_01A6 19,RT1,RT2,EHEAD : Rem keep heading out
Inc FAROUT
'
If FAROUT>TIMEBETWEEN : Rem then new plane
BOOST=0
FAROUT=0
Gosub NEWPLANE
End If
Return
'====================================================================
' record grid position of hit target
STATE:
STATEX(TRACK)=TEMPX
STATEY(TRACK)=TEMPY
Inc TRACK : Rem this tells how many targets hit
Return
'========'============================================================='
' to replace earliest hit target
'
RESTATE:
Inc TYMUP
If TYMUP>DIFFICULTY and TRACK>1 : Rem track for don't if not 2 done
TYMUP=0
' difficulty is harder as time between replace is less
XT=STATEX(0) : YT=STATEY(0) : Rem earliest set grid location
OBN(XT,YT)=8 : Rem set source(large) obn array to be a target again
'
For Z=0 To TRACK : Rem move all hit data back one
STATEX(Z)=STATEX(Z+1)
STATEY(Z)=STATEY(Z+1)
Next
Dec TRACK
'
For G=0 To ACOUNT : Rem replace target in the seperate target array
If TARGY(G)=OBY(XT,YT)
TARGX(G)=OBX(XT,YT)
End If
Next
'
Screen 4
Ink 15
Plot YT,40-XT
Get Bob 4,24,0,0 To 56,42 : Rem get new bob with earliest target replaced
Screen 3
End If
Return
'============================================================
WIN:
Locate 0,0
Print " YEEEEES!!, you got em all! "
Print " "
Print " hit a key to restart on "
Print " greater difficulty "
Print " "
Print " "
Screen Swap
Volume 0
WINN=0
'DIFFICULTY=DIFFICULTY-25
TIMEBETWEEN=TIMEBETWEEN-20 : Rem enemy damage increases as result
If TIMEBETWEEN<0 Then TIMEBETWEEN=0
Wait Key
K$="f"
Gosub AGAIN
Return
'========================================================================
HITBITS:
NEDX= Extension_4_0114(19)
NEDY= Extension_4_0128(19)
NEDZ= Extension_4_013C(19)
ETX= Extension_4_0474(NEDX,NEDY,NEDZ)
ETY= Extension_4_0480
Ink 13
If ETX>-1 and ETY>-1
For X=0 To 20
E1=ETX+Rnd(20)-10
E2=ETY+Rnd(20)-10
If E1>-1 and E2>-1 and E2<HYTE : Plot E1,E2 : End If
Next
End If
Return
'================================================
WHATSUP:
Cls 0,0,0 To 320,120
Locate 0,0
Paper 0
Pen 2
Print " flight controls on joystick "
Print " rocket launch fire"
Print " add power A"
Print " reduce power S"
Print " "
Print " normal map 1"
Print " relative map- airstrip + enemy 2"
Print " relative map- grnd. targets 3"
Print " zoom map 3 up .. Z, down.. X"
Print " Reset to runway R"
Print " pause P"
Print " stop with sound loop OFF !# C "
Print " others in readme"
Print " hit key to continue"
Print
Wait Key
Return